
#include "BarraDeFerramentas/BotaoModa.h"
#include "PetLab.h"

static int s_ordem = 3;

void OperacaoModa(Tela& tela)
{
    MatrizRGBA copia;
    copia = tela.Matriz();
    
    for(int i=0; i<tela.Largura(); i++)
        for(int j=0; j<tela.Altura(); j++)
        {
            int r=0, g=0, b=0;
            
            int v = s_ordem/2;
            int quad = s_ordem*s_ordem;
            
            for(int p=-v; p<=v; p++)
                for(int q=-v; q<=v; q++)
                    if(i+p>=0 && i+p<tela.Largura() && j+q>=0 && j+q<tela.Altura())
                    {
                        r += BANDA_R(copia[i+p][j+q]);
                        g += BANDA_G(copia[i+p][j+q]);
                        b += BANDA_B(copia[i+p][j+q]);
                    }

            tela.Set(i, j, RGBA(r/quad, g/quad, b/quad, 255));
        }
 
    tela.Redesenhar();
}


BotaoModa::BotaoModa(int cx, int cy, int x, int y)
    : Botao(cx, cy, x, y)
{
    Matriz().Retangulo(0,0,cx,cy,RGBA(0,0,0,0));
    Matriz().Retangulo(0,0,cx-1,cy-1,RGBA(8,108,245,128+32),2);

    Texto* texto = new Texto("Moda", 12, 1);
    texto->Fonte("verdana", 13, RGBA(215,215,215,255));
    AdicionarControle(texto);
}


bool BotaoModa::AoBaixarEsq(EventoBaixarEsq ev)
{
    s_ordem = g_PetLab->Ferramentas()->Suavizacao()->Mascara()->Ordem();
    OperacaoModa(*(g_PetLab->m_PainelA->Tela()));
    g_PetLab->m_PainelB->Tela()->Carregar(g_PetLab->m_PainelA->Tela());

	return false;
}
